package lab.craft;

/**
 * token流. 由 Lexer 生成. Parser 可以从中获取 Token
 */
public interface TokenReader {
    /**
     * 返回 Token 流中的下一个token,并从流中取出.否则返回 null
     * @return Token or null
     */
    public Token read();

    /**
     *  返回 Token 流中的下一个token,但不从流中取出.否则返回 null
     * @return Token or null
     */
    public Token peek();

    /**
     * 从 Token 流回退一步,恢复原来的 token
     */
    public void unread();

    /**
     * 获取 Token 流当前的读取位置
     * @return position of token
     */
    public int getPosition();

    /**
     * 设置 Token 流当前的读取位置
     * @param position 位置, int
     */
    public void setPosition(int position);
}
